package com.le.enhance.class5;

import org.junit.Test;

/**
 * 给定一个数组，求子数组的最大异或和。
 * 一个数组的异或和为，数组中所有的数异或起来的结果。
 */
public class Code_05_Max_EOR {

    public static int process1(int[] arr){
        if (arr == null || arr.length == 0){
            return 0;
        }
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < i; j++) {
                int eor = 0;
                for (int k = j; k <=i ; k++) {
                    eor ^= arr[k];
                }
                max = Math.max(eor,max);
            }
        }
        return max;
    }

    public static int process2(int[] arr){
        if (arr == null || arr.length == 0){
            return 0;
        }
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < arr.length; i++) {
            int eor = 0;
            for (int j = i; j < arr.length; j++) {
                eor ^= arr[j];
                max = Math.max(eor,max);
            }
        }
        return max;
    }

    public static int process3(int[] arr){
        if (arr == null || arr.length == 0){
            return 0;
        }
        int max = Integer.MIN_VALUE;
        int eor = 0;
        for (int i = 0; i < arr.length; i++) {
            eor ^= arr[i]; // 0 .. i
            for (int j = 1; j <= i; j++) {
                max = Math.max(max,eor ^ arr[j]); // j .. i
            }
        }
        return max;
    }



    @Test
    public void test(){
        int[] arr = {4,5,6,7,8};
        System.out.println(process1(arr));
        System.out.println(process2(arr));
        System.out.println(process3(arr));
    }
}
